#define _CRT_SECURE_NO_WARNINGS 1
#include"Contacts.h"
#include"SList.h"

void InitContact(contact** con) {
	FILE* fp = fopen("Contacts.txt", "rb");
	if (fp == NULL) {
		perror("fopen\n");

		exit(1);
	}
	Info info;
	while (fread(&info, sizeof(info), 1, fp)) {
		SLTPushBack(con, info);
	}
	printf("历史数据已导入通讯录\n");
}

void Consave(contact* con) {
	FILE* fp = fopen("contacts.txt", "wb");
	if (fp == NULL) {
		perror("fopen\n");

		exit(1);
	}
	contact* pcur = con;
	while (pcur) {
		fwrite(&(pcur)->data, sizeof(pcur->data), 1, fp);
		pcur = pcur->next;
	}
	printf("保存成功\n");
}

void AddContact(contact** con) {
	
	Info info;
	printf("请输入要添加的姓名：");
	scanf("%s", info.name);
	printf("请输入要添加的性别：");
	scanf("%s", info.sex);
	printf("请输入要添加的年龄：");
	scanf("%d", &info.age);
	printf("请输入要添加的电话：");
	scanf("%s", info.tel);
	printf("请输入要添加的地址：");
	scanf("%s", info.addr);
	
	printf("添加成功\n");
	SLTPushBack(con, info);
}

void ShowContact(contact* con) {
	assert(con);

	contact* pcur = con;
	printf("姓名 性别 年龄 电话 地址\n");
	while (pcur) {
		printf("%s %s %d %s %s",
			pcur->data.name,
			pcur->data.sex,
			pcur->data.age,
			pcur->data.tel,
			pcur->data.addr
		);
		pcur = pcur->next;
		printf("\n");
	}
	}

contact* FindByName(contact* con, char name[]) {
	contact* pcur = con;
	while (pcur) {
		if (0 == strcmp(pcur->data.name, name)) {
			return pcur;
		}
		pcur = pcur->next;
	}
	return NULL;
}

void DelContact(contact** con) {
	assert(con&&*con);
	char name[NAME_MAX];
	scanf("%s", name);
	
	contact* find = FindByName(*con, name);
	SLTErase(con, find);
	printf("删除成功\N");
}

void FindContact(contact* con) {
	assert(con);
	printf("请输入要查找的联系人");
	char name[NAME_MAX];
	scanf("%s", name);

	contact* find = FindByName(con, name);
	printf("姓名 性别 年龄 电话 地址\n");
	printf("%s %s %d %s %s",
		find->data.name,
		find->data.sex,
		find->data.age,
		find->data.tel,
		find->data.addr
	);
	printf("\n");
}

void ModifyContact(contact** con) {
	assert(con&&*con);

	printf("请输入想要修改的联系人：");
	char name[NAME_MAX];
	scanf("%s", name);
	contact* find = FindByName(*con, name);
	if (find == NULL) {
		return 1;
	}
	printf("请输入新的姓名：");
	scanf("%s", find->data.name);
	printf("请输入新的性别：");
	scanf("%s", find->data.sex);
	printf("请输入新的年龄：");
	scanf("%d", &find->data.age);
	printf("请输入新的电话：");
	scanf("%s", find->data.tel);
	printf("请输入新的地址：");
	scanf("%s", find->data.addr);
	printf("修改成功\n");
}

void DestroyContact(contact** con) {
	SLTDeatroy(con);
	Consave(con);
}